#!/bin/bash
#######################################################
# Author: liangliangSu
# Created Time: 2023-06-21 16:54
# Email: sll917@outlook.com
# Version: V1.0
# File Name: 06echo_命令详解.sh
#######################################################
echo '(1)------------------完美分割线---------------------'
: '
echo 是 Shell 的一个内部指令，用于在屏幕上打印出指定的字符串。命令格式：
echo arg
您可以使用 echo 实现更复杂的输出格式控制。
'
#1)显示转义字符
echo "\"It is a test\""
#结果将是：
#"It is a test"
#双引号也可以省略。
#2)显示变量
name="OK"
echo "$name It is a test"
#结果将是：
#OK It is a test
#同样双引号也可以省略。
#3)如果变量与其它字符相连的话，需要使用大括号（{ }）：
mouth=8
echo "${mouth}-1-2009"
#结果将是：
#8-1-2009
#4)显示换行
echo "OK!\n"
echo "It is a test"
#输出：
#OK!
#It is a test
#显示不换行
echo "OK!\c"
echo "It is a test"
#输出：
#OK!It si a test
#5)显示结果重定向至文件
# echo "It is a test" >echo.txt
#6)若需要原样输出字符串（不进行转义），请使用单引号。
#例如：
echo '$name\"'
#显示命令执行结果
echo $(date)
#结果将显示当前日期
#从上面可看出，双引号可有可无，单引号主要用在原样输出中。
echo -n "打印不带换行符的文本"
echo -e "\n删除\t特殊\t字符\n"

: '
1， 语 法：
echo [--help][--version] 或 echo [Options][字符串]

参数：
–help 显示帮助
–version显示版本信息
选项：
-n 不要输出衍生的新行, 不加时默认换行
-e 启用反斜线转义解释
-E 禁用反斜线转义解释（默认）
字符串可以加引号，也可以不加引号。
如果使用-e选项，则可以使用如下转义序列：

字符 意义
\a 发出警告声
\b 删除前一个字符
\c 不产生进一步输出,只输出\c之前的内容
\f 换行，但下一行内容起始位置和上一行从\f处换行的位置对齐
\n 换行，下一行内容和上一行内容对齐
\r 换行字符，光标移至行首，输出\r后面的内容
\t 插入tab水平制表符
\v 换行，但下一行内容起始位置和上一行从\v处换行的位置对齐
\\ 反斜线，插入\字符 反斜线，
\nnn 插入nnn（八进制）所代表的ASCII字符
\0NNN 八进制值表示的字节NNN（1到3个数字）
\xHH 十六进制值表示的字节NNN（1到2个数字）

2，控制台打印各种颜色字体和背景

字体颜色
#30:黑
#31:红
#32:绿
#33:黄
#34:蓝色
#35:紫色
#36:深绿
#37:白色

背景颜色
#40:黑
#41:深红
#42:绿
#43:黄色
#44:蓝色
#45:紫色
#46:深绿
#47:白色

3，ANSI控制码的说明

\e[0m 关闭所有属性
\e[01m 设置高亮度
\e[04m 下划线
\e[05m 闪烁
\e[07m 反显
\e[08m 消隐
\e[30m – \e[37m 设置前景色
\e[40m – \e[47m 设置背景色
\e[nA 光标上移n行
\e[nB 光标下移n行
\e[nC 光标右移n行
\e[nD 光标左移n行
\e[y;xH设置光标位置
\e[2J 清屏
\e[K 清除从光标到行尾的内容
\e[s 保存光标位置
\e[u 恢复光标位置
\e[?25l 隐藏光标
\e[?25h 显示光标

4，echo是通过使用“转义序列”来为世界涂上颜色的。语法格式如下：
echo -e " \033[颜色1 ; 颜色2m 要展示的文字 \033[0m "
格式详解：

-e选项：表示允许反斜杠（对字符）转义。
\033[颜色1；颜色2m：称为转义序列，它本身是一个整体，中间不要有空格。
\033[：转义序列的开始。其中\033代表Esc符号，也可以使用\E或\e来代替。
颜色1和颜色2：表示字体的前景色或背景色，至于颜色1和颜色2哪一个表示前景色，
哪一个表示背景色，由其设定的数值来决定，前景色和背景色的数值空间是不同的。
m：转义序列的终止标志。
\033[0m：表示将颜色恢复回原来的配色。
'
echo '(2)------------------完美分割线---------------------'
#5， 代码实现
#for的第1种写法
for i in {30..37}; do
	echo -e "\e[1;${i}m hello world \e[0m linux"
done

echo '(3)------------------完美分割线---------------------'
#for的第2种写法
for ((j = 47; j >= 40; --j)); do
	echo -e "\033[$j;$(($j - 10))m linux \033[0m \e[1;$(($j - 10))m Torvalds\e[0m"
done

echo '(4)------------------完美分割线---------------------'
for i in {1..8}; do
	echo -e "\e[$i;30;44m hello Torvalds\e[0m"
done

